﻿using System.Collections.Generic;
using System.Web.Mvc;
using User.Global.Contracts.Message;
using User.Web.UI.Helper.CastleWindsor;

namespace User.Web.UI.Helper.Messages
{
    /// <summary>
    /// Custom Message, damit Nachrichten auch über Views hinweg dargestellt werden können.
    /// </summary>
    public class CustomMessage : IAddMessage
    {
        #region Member
        /// <summary>
        /// Constante die für den Tempdata[TempMessageString] benutzt wird.
        /// </summary>
        public const string TempMessageString = "CMTempMessageString";
        #endregion

        #region Implementation of IAddMessages
        /// <summary>
        /// Fügt eine Message hinzu.
        /// </summary>
        /// <param name="text">Der Text der angezeigt werden soll</param>
        /// <param name="messageTypes">Um die Art der Nachricht die angezeigt werden soll</param>
        /// <returns>TRUE->Nachricht erfolgreich der Liste hinzugefügt | FALSE->Fehler beim Hinzufügen der Messages</returns>
        public bool Add(string text, MessageTypes messageTypes)
        {
            if (text != null)
            {
                Controller controller = (Controller)CustomControllerFactory.GetCurrentController();
                if (controller != null)
                {
                    //Eine Liste erstellen, damit wird jetzt jede Meldung hinzugefügt und alle können angezeigt werden.
                    List<IMessage> messages = (List<IMessage>)controller.TempData[TempMessageString];
                    //Wenn noch keine Nachrichten hinterlegt wurden, muss die Liste initialisiert werden
                    if (messages == null)
                    {
                        messages = new List<IMessage>();
                    }

                    messages.Add(new Message(text, messageTypes));

                    //Die Message im TempData hinterlegen, damit diese dann von der Passenden Helper Methode dargestellt werden kann.
                    controller.TempData[TempMessageString] = messages;
                    return true;
                }
            }

            return false;
        }
        #endregion
    }
}